home *** CD-ROM | disk | FTP | other *** search
/ Pascal Super Library / Pascal Super Library (CW International)(1997).bin / LIBRARY / PAS_0693 / DUMPFILE.PAS < prev    next >
Pascal/Delphi Source File  |  1993-06-30  |  3KB  |  87 lines

  1. {─ Fido Pascal Conference ────────────────────────────────────────────── PASCAL ─
  2. Msg  : 343 of 375
  3. From : David Drzyzga                       1:3612/220.0         30 May 93  06:10
  4. To   : All
  5. Subj : A File
  6. ────────────────────────────────────────────────────────────────────────────────
  7. The other day I saw a message with some code in it that made a .ARC file from
  8. an array, so I decided to write someething that would do that. How about an
  9. example:
  10.  
  11. DUMPFILE TEST.ZIP  Will create a file called MAKEFILE.PAS
  12.  
  13. If you compile and run MAKEFILE, it will re-create the file TEST.ZIP
  14.  
  15. Well, that wasn't as hard as I thought it was going to be <grin>. Here's
  16. DUMPFILE.PAS:}
  17.  
  18. program dumpfile;
  19. {-Dumps any file (32k or less) into source code that will rebuild it}
  20.  
  21. var
  22.   InFile  : File;
  23.   OutFile : Text;
  24.   InByte  : Byte;
  25.   FilSiz,
  26.   OutStr  : String[5];
  27.   Counter : Integer;
  28.   InBuff  : array[1..31744] of byte;
  29.   OutBuff : array[1..31744] of char;
  30.   RecordsRead  : integer;
  31.  
  32. Procedure Header;
  33. Begin
  34.   WriteLn(OutFile, 'Program MakeFile;');
  35.   WriteLn(OutFile, '');
  36.   WriteLn(OutFile, 'Var');
  37.   WriteLn(OutFile, '  F : File;');
  38.   WriteLn(OutFile, '');
  39.   WriteLn(OutFile, 'Const');
  40.   WriteLn(OutFile, '  ByteArray : Array[1..' + FilSiz + '] Of Byte = (');
  41. End;
  42.  
  43. Procedure Footer;
  44. Begin
  45.   WriteLn(OutFile, '');
  46.   WriteLn(OutFile, 'Begin');
  47.   WriteLn(OutFile, '  Assign(F,''' + ParamStr(1) + ''');');
  48.   WriteLn(OutFile, '  ReWrite(F,' + FilSiz + ');');
  49.   WriteLn(OutFile, '  BlockWrite(F,ByteArray,1);');
  50.   WriteLn(OutFile, '  Close(F);');
  51.   WriteLn(OutFile, 'End.');
  52. End;
  53.  
  54. Begin
  55.   Assign(InFile, Paramstr(1));
  56.   Assign(OutFile, 'MAKEFILE.PAS');
  57.   SetTextBuf(OutFile, OutBuff);
  58.   Reset(InFile,1);
  59.   If FileSize(InFile) > 32769 Then Halt; {file was too big}
  60.   ReWrite(OutFile);
  61.   Str(FileSize(InFile), FilSiz);
  62.   Header;
  63.   Repeat
  64.     BlockRead(InFile,InBuff,SizeOf(InBuff),RecordsRead);
  65.     Write(OutFile, '    ');
  66.     For Counter := 1 To RecordsRead Do Begin
  67.       Str(InBuff[Counter], OutStr);
  68.       If (Counter = RecordsRead) And EOF(InFile) Then
  69.         WriteLn(OutFile, OutStr + ');')
  70.       Else
  71.         Write(OutFile, OutStr + ',');
  72.       If (Counter MOD 19 = 0) or 
  73.          (Counter = RecordsRead) And
  74.          Not EOF(InFile) Then Begin
  75.         WriteLn(OutFile, '');
  76.         Write(OutFile, '    ');
  77.       End;
  78.     End;
  79.   Until RecordsRead = 0;
  80.   Footer;
  81.   Close(InFile);
  82.   Close(OutFile);
  83. End.
  84.  
  85. This will only work with files 32k or less.. don't know who would want to dump 
  86. a larger file into an array anyways.  I hacked this together in a few minutes
  87. but it works on *any* valid DOS file.